import {fileURLToPath} from 'url';
import {ConfigEnv, defineConfig, loadEnv} from 'vite';

import {createBuild} from './build/vite/build';
import {wrapperEnv} from './build/utils';
import {createProxy} from './build/vite/proxy';
import {createVitePlugins} from './build/vite/plugin';
import autoprefixer from 'autoprefixer';

const CompressionPlugin = require('compression-webpack-plugin')

// https://vitejs.dev/config/
export default defineConfig(({command, mode}: ConfigEnv) => {
    const root = process.cwd(); // 当前工作目录
    const isBuild = command === 'build'; // 是否是构建 serve
    const env = loadEnv(mode, root); // 加载env环境
    const viteEnv = wrapperEnv(env);
    return {
        // base: './',
        resolve: {
            //设置别名
            alias: {
                '@': fileURLToPath(new URL('./src', import.meta.url))
            }
        },
        productionSourceMap:false,//打包时不要map文件
        configureWebpack: {
            // GZIP压缩
            plugins: [
                new CompressionPlugin({
                    test: /\.js$|\.html$|\.css/, // 匹配文件
                    threshold: 10240 // 对超过10k文件压缩
                })
            ]
        },
        build: createBuild(viteEnv),
        css: {
            preprocessorOptions: {
                scss: {
                    additionalData: '@use "@/style/global.scss" as *;' //关键
                }
            },
            postcss: {
                // ⚠️关键代码
                plugins: [
                    autoprefixer({
                        // 自动添加前缀
                        overrideBrowserslist: [
                            'Android 4.1',
                            'iOS 7.1',
                            'Chrome > 31',
                            'ff > 31',
                            'ie >= 8'
                            //'last 2 versions', // 所有主流浏览器最近2个版本
                        ],
                        grid: true
                    })
                ]
            }
        },
        plugins: createVitePlugins(viteEnv, isBuild),
        esbuild: {
            logOverride: {'this-is-undefined-in-esm': 'silent'}
        },
        server: {
            port: 8888, //启动端口
            host: '0.0.0.0',
            open: true,
            hmr: {
                host: 'localhost',
                port: 8088
            },
            // 设置代理
            proxy: createProxy()
        }
    };
});
